// TODO: Kotlin的一些特性
// DATE: 2022/3/18
// AUTHOR: Cheng Ze WUST
fun main(args: Array<String>){
//region 可空性特点
    //默认不可以给null类型
    var str:String="233"
    println(str)
    //? 声明时指定为可空类型
    var str2:String ?
    str2=null
    println(str2)
//endregion

//region 安全调用操作符
    var str3:String?="iheqv"
    //str3=null
    var s= str3?.capitalize()   //将第一个字母转换为大写。?? 如果为空则不执行，不会引发空指针异常
    println(s)
//endregion

//region 带let的安全调用
    var str4:String?=null
    var r=str4?.let {
        //?.let如果str4为null则后面的都不执行
        //如果执行进来则it一定不为null
        if (it.isBlank()){  //如果str4是空值""(不是null)
            "Defult"
        }else{
            it
        }
    }
    println(r)
//endregion

//region 非空断言操作符
    var str5:String?=null
    //r=str5!!.capitalize()   //!! 不论是否为null都执行（和JAVA一样）
    println(r)
//endregion

//region 空合并操作符
    str5 = null
    println(str5 ?: "这里面是空的")   //如果是null则执行?:后的内容
    str5="sdda"
    println(str5?.let { "$it" }?:"这里面真的是空的")
//endregion

//region apply内置函数
    val info="Cheng Qfjh Ljhc"
    val infos=info.apply {
        //apply内it变为this
        println(length)
    }   //返回info本身
    println(infos)
//endregion

//region let内置函数
    val list=listOf(6,9,8,0,3)
    val value1=list.first() //普通方法
    println(value1)
    val sum=listOf(6,9,8,0,3).let {
        it.first()+it.last()    //最后一行为返回值
    }
    println(sum)
//endregion

//region run内置函数
    info.run {
        //it由this替代，最后一行为返回值
    }
//endregion

//region with内置函数
    //和run类似
    val dd=with(info){
        //it由this替代，最后一行为返回值
        true
    }
    println(dd)
    with(info,::println)
//endregion

//region also内置函数
    info.also {
        //返回info本身
    }
//endregion

//region


//endregion




}



